package com.awesome.livedatademo.livedata;

import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;

import android.os.Bundle;

import com.awesome.common.util.log.ShowLogUtil;
import com.awesome.livedatademo.R;

/**
 * 参考:https://juejin.cn/post/7037409679420424199
 */
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 创建LiveData对象
        MutableLiveData<String> mutableLiveData = new MutableLiveData<>();
        // 创建观察者
        Observer<String> observer = new Observer<String>() {
            @Override
            public void onChanged(String s) {
                ShowLogUtil.info("onChanged1:" + s);
            }
        };
        // 绑定观察者
        mutableLiveData.observe(this, observer);
        // 更新LiveData数据
        mutableLiveData.setValue("nice to meet you");

//        // 获取LiveData数据值
//        mutableLiveData.getValue();
//        // 是否存在活跃的观察者对象
//        mutableLiveData.hasActiveObservers();
//        // 是否有观察者对象
//        mutableLiveData.hasObservers();
//        // 添加一个感知生命周期的观察者
//        mutableLiveData.observe();
//        // 添加一个无感知生命周期的观察者
//        mutableLiveData.observeForever();
//        // 移除一个观察者
//        mutableLiveData.removeObserver(Observer observer);
//        // 根据生命周期对象移除观察者对象
//        mutableLiveData.removeObservers(LifecycleOwner owner);
//        // 设置LiveData容器数据
//        mutableLiveData.setValue();
//        // 在主线程设置LiveData容器数据
//        mutableLiveData.postValue();
//        // 当活跃的观察者对象大于0时调用
//        mutableLiveData.onActive();
//        // 当活跃的观察者对象等于0时调用
//        mutableLiveData.onInactive();


//        LiveData transFormedLiveData = Transformations.map(mutableLiveData, new Function<String, Object>() {
//            @Override
//            public Object apply(String name) {
//                return name + "glad to see you again";
//            }
//        });
//        transFormedLiveData.observe(this, new Observer() {
//            @Override
//            public void onChanged(Object o) {
//                ShowLogUtil.info("onChanged2:" + o.toString());
//            }
//        });
//        mutableLiveData.postValue("long time no see.");
    }
}